notebooks/Extractive Test.ipynb (760 lines of code) (raw):
{
"cells": [
{
"cell_type": "markdown",
"id": "f6a237c3-ea50-4610-aa7e-aa8115cca6d1",
"metadata": {
"pycharm": {
"is_executing": true
}
},
"source": [
"This notebook filters a model fine tuning dataset such that the the output text is a subset of the input data. While we are using an LLM the output is essentially an extractive model.\n",
"\n",
"The output was used to produce model \n",
"https://wandb.ai/moso/tab_grouping/runs/ti3mvxgh?nw=nwuserrrando \n",
"https://huggingface.co/Mozilla/smart-tab-topic/commit/4bd8ebe87ab4d719d2a58f263a3284eb2cbeeea9"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8d5943b4-2973-4c14-89ff-b1ad6891b01c",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1d2c9647-6725-4de7-aff4-50f809b9e89e",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from sklearn.cluster import KMeans\n",
"from bertopic import BERTopic"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "76861620-4bad-4c38-856d-4492570835f7",
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv(\"./test_data/topic_fine_tuning_data_guided__02_11_processed.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "325cf16e-027c-425d-854a-876d2a2e2e98",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0.3</th>\n",
" <th>Unnamed: 0.2</th>\n",
" <th>Unnamed: 0.1</th>\n",
" <th>Unnamed: 0</th>\n",
" <th>input_titles</th>\n",
" <th>input_keywords</th>\n",
" <th>output</th>\n",
" <th>assigned_topic</th>\n",
" <th>Hint</th>\n",
" <th>hint_guided_output</th>\n",
" <th>output_orig</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" <td>Surprising Food Trends You Need to Know in 202...</td>\n",
" <td>food,cooking,2023</td>\n",
" <td>Culinary Trends 202</td>\n",
" <td>0</td>\n",
" <td>Food</td>\n",
" <td>Culinary Trends 202</td>\n",
" <td>2023 Culinary Trends</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>34</td>\n",
" <td>34</td>\n",
" <td>Meal Prep for the Week: Save Time and Eat Heal...</td>\n",
" <td>advanced,supplies,save</td>\n",
" <td>Home Essentials</td>\n",
" <td>0</td>\n",
" <td>Home</td>\n",
" <td>Home Essentials</td>\n",
" <td>Lifestyle Essentials</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>101</td>\n",
" <td>101</td>\n",
" <td>Easy One-Pot Pasta - Allrecipes\\n50 Easy Dinne...</td>\n",
" <td>easy,50,allrecipes</td>\n",
" <td>Easy Recipes</td>\n",
" <td>0</td>\n",
" <td>Recipes</td>\n",
" <td>Easy Recipes</td>\n",
" <td>Easy Recipes</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>163</td>\n",
" <td>163</td>\n",
" <td>Master of Malt: Online Shop for Whisky and Oth...</td>\n",
" <td>wine,store,spirits</td>\n",
" <td>Liquor Stores</td>\n",
" <td>0</td>\n",
" <td>Spirits</td>\n",
" <td>Liquor Stores</td>\n",
" <td>Wine & Spirits Store</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>181</td>\n",
" <td>181</td>\n",
" <td>Bizarre Foods with Andrew Zimmern | Travel Cha...</td>\n",
" <td>2023,travel,channel</td>\n",
" <td>Travel</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>Travel and Lifestyle Shows</td>\n",
" <td>Travel & Home Shows</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2544</th>\n",
" <td>2544</td>\n",
" <td>2544</td>\n",
" <td>2179</td>\n",
" <td>2179</td>\n",
" <td>How the Inkas Governed, Thrived and Fell Witho...</td>\n",
" <td>NaN</td>\n",
" <td>History</td>\n",
" <td>97</td>\n",
" <td>NaN</td>\n",
" <td>History</td>\n",
" <td>Inca Civilization</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2545</th>\n",
" <td>2545</td>\n",
" <td>2545</td>\n",
" <td>1901</td>\n",
" <td>1901</td>\n",
" <td>How to get better at remembering | Psyche Guides</td>\n",
" <td>NaN</td>\n",
" <td>Self-Improvement</td>\n",
" <td>98</td>\n",
" <td>NaN</td>\n",
" <td>Self-Improvement</td>\n",
" <td>Memory Improvement</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2546</th>\n",
" <td>2546</td>\n",
" <td>2546</td>\n",
" <td>2028</td>\n",
" <td>2028</td>\n",
" <td>GinkgoNotes: Never forget what you've learned</td>\n",
" <td>NaN</td>\n",
" <td>Note-taking Tools</td>\n",
" <td>98</td>\n",
" <td>NaN</td>\n",
" <td>Note-taking Tools</td>\n",
" <td>Learning Tools</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2547</th>\n",
" <td>2547</td>\n",
" <td>2547</td>\n",
" <td>2355</td>\n",
" <td>2355</td>\n",
" <td>12 Things Gen X Was Taught In School That Woul...</td>\n",
" <td>NaN</td>\n",
" <td>Generational Differences</td>\n",
" <td>98</td>\n",
" <td>NaN</td>\n",
" <td>Generational Differences</td>\n",
" <td>Generational Perspectives</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2548</th>\n",
" <td>2548</td>\n",
" <td>2548</td>\n",
" <td>1797</td>\n",
" <td>1797</td>\n",
" <td>Momfluencers, tradwives, and the perils of mod...</td>\n",
" <td>NaN</td>\n",
" <td>Modern Motherhood</td>\n",
" <td>99</td>\n",
" <td>NaN</td>\n",
" <td>Modern Motherhood</td>\n",
" <td>Modern Motherhood</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2549 rows × 11 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0.3 Unnamed: 0.2 Unnamed: 0.1 Unnamed: 0 \\\n",
"0 0 0 8 8 \n",
"1 1 1 34 34 \n",
"2 2 2 101 101 \n",
"3 3 3 163 163 \n",
"4 4 4 181 181 \n",
"... ... ... ... ... \n",
"2544 2544 2544 2179 2179 \n",
"2545 2545 2545 1901 1901 \n",
"2546 2546 2546 2028 2028 \n",
"2547 2547 2547 2355 2355 \n",
"2548 2548 2548 1797 1797 \n",
"\n",
" input_titles \\\n",
"0 Surprising Food Trends You Need to Know in 202... \n",
"1 Meal Prep for the Week: Save Time and Eat Heal... \n",
"2 Easy One-Pot Pasta - Allrecipes\\n50 Easy Dinne... \n",
"3 Master of Malt: Online Shop for Whisky and Oth... \n",
"4 Bizarre Foods with Andrew Zimmern | Travel Cha... \n",
"... ... \n",
"2544 How the Inkas Governed, Thrived and Fell Witho... \n",
"2545 How to get better at remembering | Psyche Guides \n",
"2546 GinkgoNotes: Never forget what you've learned \n",
"2547 12 Things Gen X Was Taught In School That Woul... \n",
"2548 Momfluencers, tradwives, and the perils of mod... \n",
"\n",
" input_keywords output assigned_topic \\\n",
"0 food,cooking,2023 Culinary Trends 202 0 \n",
"1 advanced,supplies,save Home Essentials 0 \n",
"2 easy,50,allrecipes Easy Recipes 0 \n",
"3 wine,store,spirits Liquor Stores 0 \n",
"4 2023,travel,channel Travel 0 \n",
"... ... ... ... \n",
"2544 NaN History 97 \n",
"2545 NaN Self-Improvement 98 \n",
"2546 NaN Note-taking Tools 98 \n",
"2547 NaN Generational Differences 98 \n",
"2548 NaN Modern Motherhood 99 \n",
"\n",
" Hint hint_guided_output output_orig \n",
"0 Food Culinary Trends 202 2023 Culinary Trends \n",
"1 Home Home Essentials Lifestyle Essentials \n",
"2 Recipes Easy Recipes Easy Recipes \n",
"3 Spirits Liquor Stores Wine & Spirits Store \n",
"4 NaN Travel and Lifestyle Shows Travel & Home Shows \n",
"... ... ... ... \n",
"2544 NaN History Inca Civilization \n",
"2545 NaN Self-Improvement Memory Improvement \n",
"2546 NaN Note-taking Tools Learning Tools \n",
"2547 NaN Generational Differences Generational Perspectives \n",
"2548 NaN Modern Motherhood Modern Motherhood \n",
"\n",
"[2549 rows x 11 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "eb5b87b8-8a3f-465a-a3a4-68a23878fa65",
"metadata": {},
"outputs": [],
"source": [
"df = df.fillna(\"\")"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "eef5f5a9-ff27-4710-94c6-8f67fe9ad97a",
"metadata": {},
"outputs": [],
"source": [
"def is_output_subset(row):\n",
" if row.input_titles.lower().find(row.hint_guided_output.lower()) >= 0:\n",
" return row.hint_guided_output\n",
" if row.input_keywords.lower().find(row.hint_guided_output.lower()) >= 0:\n",
" return row.hint_guided_output\n",
" split_string = row.hint_guided_output.split()\n",
" if len(split_string) > 0:\n",
" single_word_output = split_string[0]\n",
" if row.input_titles.lower().find(single_word_output.lower()) >= 0:\n",
" return single_word_output\n",
" if row.input_keywords.lower().find(single_word_output.lower()) >= 0:\n",
" return single_word_output\n",
" return None"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "99f60e17-8533-4995-9a9b-f9f622f1245e",
"metadata": {},
"outputs": [],
"source": [
"df[\"extractive_phrase\"] = df.apply(is_output_subset, axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "1cd48de6-3811-4959-9f4a-e1a7fbcddb8b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1755"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(df[df[\"is_extractive\"]==True])"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "20888847-aad3-4410-b720-88b36d0349cb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2549"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(df)"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "bbc611b8-3f75-4aa8-906e-332e53223908",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0.3</th>\n",
" <th>Unnamed: 0.2</th>\n",
" <th>Unnamed: 0.1</th>\n",
" <th>Unnamed: 0</th>\n",
" <th>input_titles</th>\n",
" <th>input_keywords</th>\n",
" <th>output</th>\n",
" <th>assigned_topic</th>\n",
" <th>Hint</th>\n",
" <th>hint_guided_output</th>\n",
" <th>output_orig</th>\n",
" <th>is_extractive</th>\n",
" <th>extractive_phrase</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" <td>Surprising Food Trends You Need to Know in 202...</td>\n",
" <td>food,cooking,2023</td>\n",
" <td>Culinary Trends 202</td>\n",
" <td>0</td>\n",
" <td>Food</td>\n",
" <td>Culinary Trends 202</td>\n",
" <td>2023 Culinary Trends</td>\n",
" <td>False</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>34</td>\n",
" <td>34</td>\n",
" <td>Meal Prep for the Week: Save Time and Eat Heal...</td>\n",
" <td>advanced,supplies,save</td>\n",
" <td>Home Essentials</td>\n",
" <td>0</td>\n",
" <td>Home</td>\n",
" <td>Home Essentials</td>\n",
" <td>Lifestyle Essentials</td>\n",
" <td>True</td>\n",
" <td>Home</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>101</td>\n",
" <td>101</td>\n",
" <td>Easy One-Pot Pasta - Allrecipes\\n50 Easy Dinne...</td>\n",
" <td>easy,50,allrecipes</td>\n",
" <td>Easy Recipes</td>\n",
" <td>0</td>\n",
" <td>Recipes</td>\n",
" <td>Easy Recipes</td>\n",
" <td>Easy Recipes</td>\n",
" <td>True</td>\n",
" <td>Easy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>163</td>\n",
" <td>163</td>\n",
" <td>Master of Malt: Online Shop for Whisky and Oth...</td>\n",
" <td>wine,store,spirits</td>\n",
" <td>Liquor Stores</td>\n",
" <td>0</td>\n",
" <td>Spirits</td>\n",
" <td>Liquor Stores</td>\n",
" <td>Wine & Spirits Store</td>\n",
" <td>True</td>\n",
" <td>Liquor</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>181</td>\n",
" <td>181</td>\n",
" <td>Bizarre Foods with Andrew Zimmern | Travel Cha...</td>\n",
" <td>2023,travel,channel</td>\n",
" <td>Travel</td>\n",
" <td>0</td>\n",
" <td></td>\n",
" <td>Travel and Lifestyle Shows</td>\n",
" <td>Travel & Home Shows</td>\n",
" <td>True</td>\n",
" <td>Travel</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2544</th>\n",
" <td>2544</td>\n",
" <td>2544</td>\n",
" <td>2179</td>\n",
" <td>2179</td>\n",
" <td>How the Inkas Governed, Thrived and Fell Witho...</td>\n",
" <td></td>\n",
" <td>History</td>\n",
" <td>97</td>\n",
" <td></td>\n",
" <td>History</td>\n",
" <td>Inca Civilization</td>\n",
" <td>False</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2545</th>\n",
" <td>2545</td>\n",
" <td>2545</td>\n",
" <td>1901</td>\n",
" <td>1901</td>\n",
" <td>How to get better at remembering | Psyche Guides</td>\n",
" <td></td>\n",
" <td>Self-Improvement</td>\n",
" <td>98</td>\n",
" <td></td>\n",
" <td>Self-Improvement</td>\n",
" <td>Memory Improvement</td>\n",
" <td>False</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2546</th>\n",
" <td>2546</td>\n",
" <td>2546</td>\n",
" <td>2028</td>\n",
" <td>2028</td>\n",
" <td>GinkgoNotes: Never forget what you've learned</td>\n",
" <td></td>\n",
" <td>Note-taking Tools</td>\n",
" <td>98</td>\n",
" <td></td>\n",
" <td>Note-taking Tools</td>\n",
" <td>Learning Tools</td>\n",
" <td>False</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2547</th>\n",
" <td>2547</td>\n",
" <td>2547</td>\n",
" <td>2355</td>\n",
" <td>2355</td>\n",
" <td>12 Things Gen X Was Taught In School That Woul...</td>\n",
" <td></td>\n",
" <td>Generational Differences</td>\n",
" <td>98</td>\n",
" <td></td>\n",
" <td>Generational Differences</td>\n",
" <td>Generational Perspectives</td>\n",
" <td>False</td>\n",
" <td>None</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2548</th>\n",
" <td>2548</td>\n",
" <td>2548</td>\n",
" <td>1797</td>\n",
" <td>1797</td>\n",
" <td>Momfluencers, tradwives, and the perils of mod...</td>\n",
" <td></td>\n",
" <td>Modern Motherhood</td>\n",
" <td>99</td>\n",
" <td></td>\n",
" <td>Modern Motherhood</td>\n",
" <td>Modern Motherhood</td>\n",
" <td>True</td>\n",
" <td>Modern Motherhood</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2549 rows × 13 columns</p>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0.3 Unnamed: 0.2 Unnamed: 0.1 Unnamed: 0 \\\n",
"0 0 0 8 8 \n",
"1 1 1 34 34 \n",
"2 2 2 101 101 \n",
"3 3 3 163 163 \n",
"4 4 4 181 181 \n",
"... ... ... ... ... \n",
"2544 2544 2544 2179 2179 \n",
"2545 2545 2545 1901 1901 \n",
"2546 2546 2546 2028 2028 \n",
"2547 2547 2547 2355 2355 \n",
"2548 2548 2548 1797 1797 \n",
"\n",
" input_titles \\\n",
"0 Surprising Food Trends You Need to Know in 202... \n",
"1 Meal Prep for the Week: Save Time and Eat Heal... \n",
"2 Easy One-Pot Pasta - Allrecipes\\n50 Easy Dinne... \n",
"3 Master of Malt: Online Shop for Whisky and Oth... \n",
"4 Bizarre Foods with Andrew Zimmern | Travel Cha... \n",
"... ... \n",
"2544 How the Inkas Governed, Thrived and Fell Witho... \n",
"2545 How to get better at remembering | Psyche Guides \n",
"2546 GinkgoNotes: Never forget what you've learned \n",
"2547 12 Things Gen X Was Taught In School That Woul... \n",
"2548 Momfluencers, tradwives, and the perils of mod... \n",
"\n",
" input_keywords output assigned_topic \\\n",
"0 food,cooking,2023 Culinary Trends 202 0 \n",
"1 advanced,supplies,save Home Essentials 0 \n",
"2 easy,50,allrecipes Easy Recipes 0 \n",
"3 wine,store,spirits Liquor Stores 0 \n",
"4 2023,travel,channel Travel 0 \n",
"... ... ... ... \n",
"2544 History 97 \n",
"2545 Self-Improvement 98 \n",
"2546 Note-taking Tools 98 \n",
"2547 Generational Differences 98 \n",
"2548 Modern Motherhood 99 \n",
"\n",
" Hint hint_guided_output output_orig \\\n",
"0 Food Culinary Trends 202 2023 Culinary Trends \n",
"1 Home Home Essentials Lifestyle Essentials \n",
"2 Recipes Easy Recipes Easy Recipes \n",
"3 Spirits Liquor Stores Wine & Spirits Store \n",
"4 Travel and Lifestyle Shows Travel & Home Shows \n",
"... ... ... ... \n",
"2544 History Inca Civilization \n",
"2545 Self-Improvement Memory Improvement \n",
"2546 Note-taking Tools Learning Tools \n",
"2547 Generational Differences Generational Perspectives \n",
"2548 Modern Motherhood Modern Motherhood \n",
"\n",
" is_extractive extractive_phrase \n",
"0 False None \n",
"1 True Home \n",
"2 True Easy \n",
"3 True Liquor \n",
"4 True Travel \n",
"... ... ... \n",
"2544 False None \n",
"2545 False None \n",
"2546 False None \n",
"2547 False None \n",
"2548 True Modern Motherhood \n",
"\n",
"[2549 rows x 13 columns]"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 66,
"id": "809aa9de-99d6-448d-ab20-6ec1cae18c4a",
"metadata": {},
"outputs": [],
"source": [
"df = df[df.extractive_phrase.notna()]"
]
},
{
"cell_type": "code",
"execution_count": 67,
"id": "7f63568f-62b5-46bb-82a8-f0f5fd253821",
"metadata": {},
"outputs": [],
"source": [
"df[\"output\"] = df.extractive_phrase"
]
},
{
"cell_type": "code",
"execution_count": 68,
"id": "15bc5eda-213e-470a-8de4-c65282a41631",
"metadata": {},
"outputs": [],
"source": [
"df.to_csv(\"./test_data/topic_fine_tuning_data_extractive_2_15.csv\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9ccfcbd9-f456-4007-8b01-44d6c2f9ecb8",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}